package com.east.sng.dao;

import com.east.sng.entity.param.CourseTypeParam;
import com.east.sng.entity.result.CourseTypeFind;
import com.east.sng.entity.result.CourseTypeInfo;
import com.east.sng.utils.RedisCache;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @author east
 * @date: 2020/12/28
 * @Description:
 **/
@Repository
@CacheNamespace(implementation = RedisCache.class)
public interface CourseTypeDao {

    /**
     * 查询全部课程类型
     * @param courseTypeName 课程类型名称
     * @param flag 删除标志
     * @return 课程类型实例对象列表
     */
    List<CourseTypeInfo> selectCourseTypes(@Param("courseTypeName") String courseTypeName,@Param("flag") Integer flag);

    /**
     * 查询全部课程类型的id和名称
     * @return 课程类型id和名称列表
     */
    @Select("select course_typeid courseTypeId,course_typename courseTypeName from course_type where flag = 0")
    List<Map<String,String>> selectCourseTypeColumns();

    /**
     * 根据课程类型id查询
     * @param courseTypeId 课程类型id
     * @return 课程类型对象实例
     */
    @Select("select * from course_type where flag = 0 and course_typeid = #{courseTypeId} ")
    CourseTypeFind selectCourseType(Integer courseTypeId);

    /**
     * 课程类型添加
     * @param courseType 课程类型对象实例
     */
    @Insert("insert into course_type(course_typeid,course_typename) values(null ,#{courseTypeName})")
    void insertCourseType(CourseTypeParam courseType);

    /**
     * 课程类型修改
     * @param courseType 课程类型对象实例
     */
    @Update("update course_type set course_typename = #{courseTypeName} where course_typeid = #{courseTypeId} ")
    void updateCourseType(CourseTypeParam courseType);

    /**
     * 课程类型删除或恢复
     *
     * @param courseTypeId 课程类型id
     * @param flag         删除标志
     * @return 受影响行数
     */
    @Delete("update course_type set flag=#{flag} where course_typeid = #{courseTypeId} ")
    Integer deleteOrRecoverCourseType(@Param("courseTypeId") Integer courseTypeId, @Param("flag") Integer flag);

    /**
     * 课程类型批量删除或恢复
     * @param courseTypeIds 课程类型id列表
     * @param flag 删除标志
     * @return 受影响行数
     */
    @Delete({"<script>","update course_type set flag = #{flag} where course_typeid in",
            "<foreach collection='list' item='courseTypeId' open='(' separator=',' close=')'>",
            "#{courseTypeId}",
            "</foreach>",
            "</script>"})
    Integer batchDeleteOrRecoverCourseType(@Param("list") List<Integer> courseTypeIds,@Param("flag") Integer flag);

}
